A mailbox is a general purpose communication mechanism between two independent computer resources. Those resources can be software processes running on a single processor, or two software processes running on different processors. The complete mailbox channel generally incorporates a mailbox mechanism in each direction when the resources are on different processors or when a full duplex channel is desired.
One way to use mailboxes is to allocate one mailbox to each initiator that might need to send a message to the responder. But allocating one mailbox to each initiator can result in an excess of idle mailboxes.
When the number of mailboxes is less than the number of initiators, a resource arbitrator is needed to respond to the mailbox requests and releases. The resource arbitrator is responsible for allocating mailboxes from the pool of idle mailboxes, and then returning them to the pool upon release. A resource arbitrator works well, but adds another level of overhead to the mailbox usage model. For example, in the extreme case, where there are N initiators but only one mailbox, the resource arbitrator might need to queue a number of mailbox pending requests while the mailbox is in use.
An alternative to a resource arbitrator is to permit the initiators to manage the allocation and release of the mailboxes directly. The difficulty with this approach is that when an initiator claims a mailbox, that initiator needs to be certain that no other initiator has also claimed it.
A need remains for a way to permit initiators to allocate a mailbox for itself without concern that another initiator can use that mailbox.